"""
    目标：断言练习
    案例：
        输入：正确用户名和密码 验证码为空
        断言：提示信息是否为，验证码不能为空
        要求：如果断言出错，截屏保存。

    断言练习：
        目标：tpshop登录
        方法：
            def setUp():
                # 获取driver
                # 打开url
                # 最大化浏览器
                # 隐式等待
            def tearDown():
                # 关闭浏览器驱动

            def test_login_code_null():
                # 根据业务流程填写
                # ...
                # 失败截图
"""
import time
# 导包
import unittest
from time import sleep

from selenium import webdriver


# 定义测试类 并 继承 unittest.TestCase
class TestTpshopLogin(unittest.TestCase):

    # 定义初始化方法
    def setUp(self):
        # 获取浏览器驱动对象
        self.driver = webdriver.Chrome()
        # 打开url
        self.driver.get("https://demo.ruoyi.vip/login")
        # 最大化浏览器
        self.driver.maximize_window()
        # 隐式等待
        self.driver.implicitly_wait(30)

    # 定义teardown
    def tearDown(self):
        # 关闭浏览器驱动
        sleep(2)
        self.driver.quit()

    # 定义登录测试方法 验证码为空
    def test_login_code_null(self):
        driver = self.driver
        # 点击登录连接: 由于直接进入登录也这里无需操作

        # 输入用户名
        username = driver.find_element_by_css_selector('[name="username"]')
        username.clear()
        username.send_keys("admin")

        # 输入密码
        password = driver.find_element_by_css_selector('[name="password"]')
        password.clear()
        password.send_keys("admin123")

        # 输入验证码: 这里只能我手动输入了
        # sleep(8)

        # 点击登录
        driver.find_element_by_id('btnSubmit').click()
        sleep(3) # 需要等待3秒等进入页面

        # 获取登录后提示信息
        result = driver.find_element_by_css_selector('.layui-layer-content').text
        print("result:", result)
        # 定义预期结果
        # expect_result = "请输入验证码"
        # 测试断言错误
        expect_result = "请输入验证码!!"
        try:
            # 断言
            self.assertEqual(result, expect_result)
        except AssertionError:
            # 截图
            driver.get_screenshot_as_file("../image/{}.png".format(time.strftime("%Y_%m_%d_%H_%M_%S")))
            # 抛异常
            raise
